钥匙串
Keychain 提供对系统钥匙串(Keychain)的安全访问接口,用于在 Scripting 脚本环境中安全、持久地存储敏感数据,典型用途包括:
- 登录凭证
- Token
- 许可证信息
- 订阅状态
- 加密密钥
- 用户隐私数据
所有数据均使用系统级 Keychain 安全机制存储,具备高安全性与持久性。
一、Keychain 的脚本作用域隔离规则
在 Scripting 中,Keychain 采用 按脚本隔离(Per-Script Sandbox) 的安全模型:
1. 作用域规则
-
每一个脚本拥有独立的 Keychain 作用域
-
每个脚本 只能访问自己写入的 Keychain 数据
-
不同脚本之间:
-
即使 Key 名相同
-
即使
synchronizable: true -
也 无法互相读取或覆盖数据
-
脚本被视为独立安全单元
2. 该规则的安全意义
该设计确保:
- 不同脚本之间的数据完全隔离
- 防止第三方脚本窃取用户隐私数据
- 防止恶意脚本读取登录态、订阅状态、授权信息
- 提供比系统 Keychain 更细粒度的安全隔离层
3. 脚本卸载对 Keychain 的影响
-
当脚本被删除后:
- 该脚本作用域下的 Keychain 数据将被系统回收
-
其他脚本的数据不会受到任何影响
二、API 命名空间
三、支持的数据类型
Keychain 支持以下三种数据类型:
四、KeychainAccessibility 可访问性策略
默认值:
五、iCloud 同步(synchronizable)
默认值:
六、写入数据
1. 写入字符串
2. 写入布尔值
3. 写入二进制数据
4. 覆盖规则
- Key 已存在时会自动覆盖
- 成功返回
true - 失败返回
false
七、读取数据
字符串
布尔值
二进制数据
八、删除数据
- Key 存在:删除并返回
true - Key 不存在:安全返回
true
九、是否存在
十、获取所有 Key
十一、清空 Keychain
- 仅清空当前脚本作用域内的数据
- 不影响其他脚本
- 不影响 App 自身或其他 App 的系统 Keychain 数据
十二、synchronizable 的读写一致性规则
如果某 Key 使用:
则后续所有操作必须带相同参数:
十三、安全性与使用建议
适合存储的数据
- 登录 Token
- 订阅与授权状态
- 用户唯一标识
- 加密密钥
不建议存储
- 大体积文件
- 高频变化的缓存数据
- 可公开的普通配置
